Top 10k strings from Programmierung der Z80 (19xx)(-)(de)(Part 1 of 3).z80 in <root> / bin / z80 / software / Sinclair Spectrum Collection TOSEC.exe / Sinclair ZX Spectrum - Utilities & Educational / Sinclair ZX Spectrum - Utilities & Educational - [Z80] (TOSEC-v2007-01-01) /

Back to the directory listing

   2 drck=druck:
   2 a$="LD  c , l":
   2 a$="LD  bc , 240":
   2 a$="LD  b , h":
   2 "Befehl","
   1 k$="6831":
   1 k$="1011010":
   1 k$(n)+"  x  "+
   1 geschrieben
   1 druck=drck:
   1 druck=drck
   1 b$="geschrieben
   1 a$="ueberhauptnichts.":
   1 a$="set  7 , a .":
   1 a$="set  0 , a":
   1 a$="schreiben, sondern man muss":
   1 a$="nur dann zur Adresse NN, wenn das Z-Flag ungleich  1  ist.":
   1 a$="nur dann zur Adresse NN , wenn das Z-Flag  1  ist.":
   1 a$="niederwertiges Byte":
   1 a$="nach Aufruf dieses Programmes mit  PRINT USR 40000  schreibt der Computer die Zahl 240  auf den Bildschirm.":
   1 a$="mit Uebertrag einer 1 auf die naechste":
   1 a$="ld  a , ( hl )":
   1 a$="jr  z , DIS":
   1 a$="jr  nz , DIS":
   1 a$="jr  DIS":
   1 a$="jp  z , NN":
   1 a$="jp  nz , NN":
   1 a$="hoeherwertiges Byte":
   1 a$="gesetzt werden.":
   1 a$="eingeben, da fuer die Uebertragung von Registerpaaren keine Befehle vorgesehen sind.":
   1 a$="djnz  DIS":
   1 a$="dec  b : jr nz , DIS":
   1 a$="dafuer aber sogenannte ""Flags"" , die erkennen, ob eine Bedingung wahr ist (1) oder falsch (0). Es gibt fuer solche Zwecke  6  Flags, die als sechs Bits in dem F - Register stehen.":
   1 a$="benutzen. Beachten Sie, dass das Flag-Register  f  zusammen mit dem Akku abgespeichert wird.":
   1 a$="bedeutet":
   1 a$="b)  ein Einzelregister durch inc oder dec auf Null gekommen ist. Das Zero-Flag ( kurz Z-Flag genannt ), ist bereits in vielen Befehlen integriert."
   1 a$="auf dem ZX-Spectrum 48K":
   1 a$="a)  der Akkumulator Null ist , oder":
   1 a$="Zum Beispiel springt der Befehl":
   1 a$="Zuerst stellen wir folgende Tabelle auf :":
   1 a$="Zuerst befassen wir uns mit den Befehlen  set , res  und bit  der 203er-Gruppe. Um sie zu verstehen, muessen wir uns wieder ein Byte als 8 Bit vorstellen. Wenn der Inhalt des Akkus z.B. 60 ist, so sieht das so aus :":
   1 a$="Wollen wir dagegen das Bit Nr. 7 (ganz links) setzen, so schreiben wir":
   1 a$="Wollen Sie jede Seite auf dem Drucker ausgedruckt haben  ( ja / nein ) ?":
   1 a$="Wir wollen uns aber direkt mit der Hauptsprache der Z80 befassen.":
   1 a$="Wir wollen dazu ein kleines Programm betrachten :":
   1 a$="Wir haben das Programm also folgendermassen analysiert :":
   1 a$="Will man zwei Adressen weiter weg springen, muss  DIS = 1 sein, usw. Sehen Sie folgende Beispiele :"
   1 a$="Will man z.B. die zahlen 12 und 14 multiplizieren, stellt man eine b-Schleife auf, die von 12 bis Null rueckwarts zaehlt, und erhoeht in dieser Schleife den Akku, der anfangs Null ist, um 14. Am Ende dieser Schleife traegt der Akku das Ergebnis 12 x 14 = 168 .":
   1 a$="Will man dagegen nach oben (also rueckwaerts) springen, so muss bei einem Sprung  DIS = 253  sein. Bei zwei Spruengen rueckwaerts muss  DIS = 252  sein, usw .":
   1 a$="Wie wir sehen, bedeutet eine Stelle dieser Binaerzahl ein Bit. Nun, der Befehl  set  kann einzelne Bits setzen. In gleicher Weise kann der Befehl  res  Bits zuruecksetzen. Dazu ist der Name des Einzelregisters, sowie die Nummer des Bits ( 7 bis 0 ) notwendig. Da es sich hier um den Akku handelt, kann das Bit Nr. 0 (ganz rechts) mit dem Befehl":
   1 a$="Wie wir hier sehr gut sehen koennen, befindet sich das Programm in einer Endlosschleife, d.h., der  ret-Befehl wird niemals erreicht.":
   1 a$="Wie wir am  JP-Befehl sehen koennen, benoetigt er eine Zieladresse, die immer feststehen muss. Kurzprogramme mit diesem Befehl lassen sich nicht verschieben und ausserdem kostet es ziemlich viel Speicherplatz, wenn man auch nur einen kurzen Sprung ausueben will ( 3 Bytes ).":
   1 a$="Wie man hier sehr gut sehen kann, veranlasst die b-Schleife hier, dass a 150-mal um 1 erhoeht wird. Am Ende dieses Programmes ist  a = 150  und  b = 0. Auf diese Art ist es moeglich, Multiplikationsprogramme zu schreiben.":
   1 a$="Wie bereits erwaehnt wurde, kann man nur mit dem a-Register (Akku) rechnen. Wenn wir also z.B. die Zahlen 100 und 80 zusammenaddieren wollen, benutzen wir den Befehl  add . Er addiert zum Inhalt des Akkus entweder eines der Register  b, c, d, e, h  oder  l hinzu, oder eine beliebige Zahl mit dem Befehl  add  a , N  (wobei N wieder eine Zahl zwischen 0 und 255 sein muss ) ."
   1 a$="Wie Sie wissen duerften, kennt ein Computer nur die Zustaende  1  und  0 . Das sind in Wirklichkeit die einzigen Ziffern, die er kennt, im Gegensatz zu unseren zehn Ziffern.":
   1 a$="Wie Sie sicher bereits gemerkt haben sollten, ist der BASIC-Befehl  USR  dasselbe wie  call, auch hier muss am Ende des aufgerufenen Programmes ein  ret  stehen. ":
   1 a$="Wie Sie sehen, bedeutet jede Stelle ein Vielfaches von Zehn. Also setzt sich z.B. die Zahl  1386  folgendermassen zusammen :":
   1 a$="Wichtig bei  call ist, dass am Ende des aufgerufenen Unterprogrammes ein  ret  stehen muss (wie RETURN in BASIC).":
   1 a$="Wenn z.B. das hoeherwertige Byte auf 1 steht, so bedeutet das nicht 1 , sondern 1 x 256 :":
   1 a$="Wenn wir uns aber eine Binaerzahl ansehen, bedeutet jede Ziffernstelle ein Vielfaches von zwei, also  EINER, ZWEIER, VIERER, ACHTER, usw.":
   1 a$="Wenn wir jetzt auch dieses Programm analysieren wollen, so stehen wir vor einem Problem. Der Befehl  LD  bc , 240  besteht nicht nur aus einer Zahl, sondern aus dreien. Der Code dieses Befehles ist  1 . Wenn wir im Anhang C  des Handbuches suchen, finden wir den Befehl  LD  bc , NN .":
   1 a$="Wenn wir dann die Binaerzahl  1011010  in eine Dezimalzahl umrechnen wollen, so muessen wir wie folgt vorgehen :":
   1 a$="Wenn wir dann  PRINT USR 40000 eingeben, wird ebenfalls wie im vorigen Beispiel die Zahl 240 auf den Bildschirm geschrieben.":
   1 a$="Wenn wir aber ein Einzel- oder Doppelregister nur um 1  vergroessern oder verringern wollen, stehen uns die Befehle  inc  bzw.  dec  zur Verfuegung. Also zaehlt der Befehl  inc  d  zu dem d-Register 1 hinzu, waehrend  dec  a  vom Akku 1 abzieht. Dasselbe gilt fuer die Registerpaare  bc, de  und  hl ."
   1 a$="Wenn sich die Z80 einmal in so einer Endlosschleife befindet, d.h., wenn nicht mehr zum BASIC zurueckgesprungen werden kann, muss man den Netzstecker ziehen. Um soetwas zu umgehen, nimmt man im BASIC  IF-Befehle, die erkennen, ob eine bestimmte Bedingung erfuellt ist, oder nicht. In der Z80-Maschinensprache gibt es zwar keine IF-Befehle,":
   1 a$="Wenn Spruenglaengen groesser als +129 oder kleiner als -126 notwendig sind, muessen Sie halt auf  Jp  zurueckgreifen.":
   1 a$="Wenn Sie im Anhang  C  des Handbuches nachschlagen, dann finden Sie Befehle wie":
   1 a$="Wenn Sie bei dem Code  203  einen Befehl suchen, finden Sie nichts.":
   1 a$="W e i t e r e   B e f e h l e :":
   1 a$="Verwenden Sie bitte den Anhang C des BASIC-Handbuches zum nachschlagen der Codes.":
   1 a$="Unsere eigenen Maschinencode-Routinen legen wir am Besten im Bereich von 30000 bis 65000 ab. Wichtig ist, dass die Systemvariable RAMTOP unterhalb dieser Routinen liegen muss. Dazu geben wir hier den BASIC-Befehl CLEAR 39999 ein, um auch noch genug Platz fur BASIC-Programme zu lassen." 
   1 a$="Und wenn Sie 2 oder mehrere Binaerzahlen addieren wollen, so gehen Sie auch hier genauso wie im Dezimalsystem vor, ausser, dass Sie hier folgende Regeln beachten muessen :":
   1 a$="Und um z.B. dem Registerpaar  hl  den Wert des Registerpaares  bc  zu geben, schreiben Sie :":
   1 a$="Und die Befehle  inc ( hl ) und  dec ( hl )  erhoehen also nicht das hl-Register um eins, sondern den Inhalt der Adresse hl .":
   1 a$="Um diese beiden Bytes nun als eine gesamte Zahl zu benutzen, muessen wir wie folgt rechnen :":
   1 a$="Um diese Zahl errechnen zu koennen, muessen wir die beiden Bytes, aus denen der  jr  DIS -Befehl besteht, getrennt betrachten. Das erste Byte ist der Befehl selbst. Das zweite Byte ist die Zahl DIS . Nun kommt es vor allem auf die Adresse dieser Zahl DIS an. Will man eine Adresse weiter nach unten springen, muss  DIS = 0 sein.":
   1 a$="Um diese Befehle zu erhalten, stellt man die Zahl 203 voran, gefolgt von dem normalen Code. Also bedeutet dann der Code mit der Nummer 1 nicht mehr  ld bc,NN , sondern  rlc c (was das bedeutet, erfahren Sie spaeter) . Ebenso gibt es eine 237er-Gruppe, deren Befehlen eine 237 vorangestellt werden muss.":
   1 a$="Um den Wert von einem Registerpaar zu einem anderen zu uebertragen, koennen wir nicht einfach":
   1 a$="Um das Problem zu umgehen, steht der Z80-CPU der Stapel zur Verfuegung. Um die Variablen vor einem Unterprogrammaufruf zwischenzuspeichern, legt man sie mit dem  push - Befehl auf den Stapel ab. Hinterher holt man sie mit  pop  wieder vom Stapel.":
   1 a$="Um Bits zuruecksusetzten, verwenden wir den Befehl  res  (reset). Er wird genauso angewandt wie  set . Diese beiden Befehle koennen auf alle Einzelregister angewandt werden .":
   1 a$="Trotz dieser Barrieren ist es moeglich, selbst komplizierte Programme masszuschneidern. Manchmal ist mehr als nur ein Anlauf noetig, um ein MC-Programm fertigzustellen, doch man wird mit einer Spitzengeschwindigkeit bedankt."
   1 a$="Stelle.":
   1 a$="Sie stiegen soeben aus BASIC aus und in Maschinensprache ein ! Beachten Sie, dass es nicht einfach sein wird, das alles zu begreifen, da die Programmierung in der Z80-Maschinensprache im Vergleich zum BASIC unkomfortabel und computerorientiert ist."
   1 a$="Sie koennen neben dem Akkumulator auch das  hl-Register sehr oft fuer mathematische Operationen verwenden. Es gibt z.B. folgende 2-Byte-Additionsbefehle :":
   1 a$="Sie kennen die BASIC-Befehle  GOTO  und  GOSUB . Natuerlich gibt es Aequivalente in der Maschinensprache. Diese heissen  JP  (Jump)  und  call . Ihnen folgt jeweils eine 2-Byte Adresse, die anzeigt, wohin gesprungen werden soll.":
   1 a$="Sie duerfen hier den Luxus von Kommazahlen, trigonometrischen Funktionen, Zufallszahlen- generator und Graphik vergessen.Stattdessen ist es hier moeglich, ungehindert schnelle Programme zu schreiben.Aber auch das ist oft nicht leicht, denn der Computer kennt Befehle nur in Form von Zahlen."
   1 a$="Seite "+
   1 a$="Sehen wir uns eine normale Dezimalzahl an, so stellen wir fest, das wir mit der rechtesten Ziffer die EINER-Stelle haben. Die naechste ist die ZEHNER, die uebernaechste die HUNDERTER, usw.":
   1 a$="Sehen Sie auch dafuer zwei Beispiele :":
   1 a$="Schalten Sie jetzt das Tonband ab und lassen Sie es bitte in dieser Bandstellung !":
   1 a$="Schalten Sie jetzt bitte das Tonband ein ...":
   1 a$="S p r u n g b e f e h l e :":
   1 a$="R e l a t i v e   S p r u e n g e :":
   1 a$="R e c h n e n   m i t   d e m   A k k u":
   1 a$="Programmierung der"
   1 a$="Nur wenn der Vergleich zutrifft, wird das Z-Flag auf 1 gesetzt, andernfalls auf 0 .":
   1 a$="Nun gehen wir genauso vor, wie im Dezimalsystem : Wir multiplizieren jede Ziffer mit der darueber- stehenden Zahl. Die Summe aller dieser Produkte gibt das Ergebnis (siehe naechste Seite !)."
   1 a$="No operation.":
   1 a$="Nach dem BASIC-Aufruf  PRINT USR 40000 laedt die Z80 das  hl-Registerpaar mit 10000 . Danach springt sie zur Routine ab 45000, die das hl-Registerpaar um 2 erhoeht, springt zurueck und uebergibt den Inhalt in das bc-Registerpaar, von dem es mit dem PRINT-Befehl ausgedruckt wird (Ergebnis : 10002 ) .":
   1 a$="Multiplikation von zwei Zahlen :":
   1 a$="Mit ~ ret ~ springt der Computer zurueck nach BASIC.":
   1 a$="Man kann dazu die Befehle":
   1 a$="Man kann beliebig viele push-Befehle hintereinander ausfuehren, man kommt jedoch mit bis zu zehn ganz gut aus. Vergessen Sie jedoch nie, den Stack so zu verlassen, wie Sie ihn ""betreten"" haben !":
   1 a$="Man kann auch mehrere Schleifen ineinander verschachteln. Diese duerfen sich aber, genauso wie in BASIC, nicht ueberlappen. Hier sehen Sie die zwei ineinander verschachtelten Schleifen  b  und  c :":
   1 a$="Man kann aber auch stattdessen die beiden Einzelregister  b  und  c  benennen. Dabei stellt  b  das hoeherwertige, und  c  das niederwertige Byte dar. Das Programm muesste dann lauten :":
   1 a$="LD  hl , bc":
   1 a$="LD  hl , 240":
   1 a$="LD  c , 240":
   1 a$="LD  bc , hl":
   1 a$="LD  b , c":
   1 a$="LD  b , 0":
   1 a$="Jetzt wird es etwas komplizierter, denn jetzt kommen wir zu dem wichtigsten Element der Z80-Maschinensprache : dem Stack oder besser Stapel.":
   1 a$="Jedes dieser Bits hat einen anderen Verwendungszweck. Zuerst wollen wir uns mit dem Zero-Flag beschaeftigen. Dieses Flag ist immer dann eingeschaltet, wenn":
   1 a$="In derselben Art und Weise kann man mit dem Befehl  sub  vorgehen. Er zieht vom Inhalt des Akkus die entsprechend folgende Variable oder Zahl ab :":
   1 a$="Ferner gibt es den Befehl  bit . Auch ihn steuert man genauso an, wie set und res . Er setzt das Zero-Flag = 1, wenn das betreffende Bit des Rigisters 1 ist, andernfalls = 0 .":
   1 a$="Es gibt zwei Arten von Variablenbenutzung: Zum einen die 1-Byte- , und zum Anderen die 2-Byte-Befehle. Die 1-Byte-Variablen lauten a, b, c, d, e, h  und  l.  Die 2-Byte-Variablen sind zwei 1-Byte-Variablen zusammengefasst. Davon gibt es  bc, de  und  hl."
   1 a$="Es gibt neben den normalen jr-Befehlen einen weiteren, sehr leistungsfaehigen Befehl, der direkt mit dem  b-Register zusammenarbeitet. Er wird am haeufigsten fuer Schleifenprogrammierung benutzt :":
   1 a$="Es gibt in dieser Art folgende Befehle :":
   1 a$="Es gibt aber den  Jr - Befehl ( jump relative ). Mit ihm ist es moeglich, relative Sprunge auszufuehren, d.h., man gibt an, um wieviele Stellen weit man springen moechte. Man kann von -126 bis +129 von der momentanen Adresse aus springen."
   1 a$="Er zieht vom b-Register 1 ab und springt nur dann, wenn b ungleich null ist. djnz bedeutet also nichts anderes als :":
   1 a$="Er wird dazu benutzt, die Inhalte von Registerpaaren zwischenzuspeichern, damit sie nicht verlorengehen. Dazu stellen wir uns ein Hauptprogramm vor, welches mit call viele Unterprogramme aufrufen muss. Ihm stehen aber nur 7 Register zur freien Verwendung. Da die Unterprogramme aber selbst Variablen benoetigen, wuerden damit die Register des Hauptprogrammes veraendert werden.":
   1 a$="Er bewirkt":
   1 a$="Einfuehrung:":
   1 a$="Eine weitere Moeglichkeit, das Zero-Flag zu veraendern, ist der  cp - Befehl  (compare). Mit ihm ist es moeglich, den Akku mit einer anderen Variablen oder Zahl zu vergleichen.":
   1 a$="Eine 2-Byte-Zahl besteht aus einem hoherwertigen und einem niederwertigem Byte. Da sich mit einem Byte aber nur Zahlen von 0  bis 255 darstellen lassen, zaehlt das hoeherwertige Byte in 256er Schritten.":
   1 a$="Ein weiterer Punkt, der wichtig fuer den Stack ist, ist das Registerpaar  sp. Dieses zeigt automatisch auf die oberste Adresse des Stacks. Da mit dem push-Befehl immer zwei Bytes abgelegt werden, vermindert sich auch das  sp-Registerpaar um 2. Veraendern sollten aber nur geuebte Programmierer den Stackpointer ( abgekuerzt  sp ), denn wenn er auf eine falsche Art und Weise veraendert wird, kann der Rechner abstuerzen.":
   1 a$="Ein Beispiel dafuer gibt uns wieder ein Programm :":
   1 a$="Ein ""Jump relative""-Befehl erwartet hinter sich nur eine 1-Byte-Zahl. Es gibt natuerlich auch hier alle Verwendungsmoeglichkeiten fuer Flags. Lernen Sie besonders folgende Befehlscodes auswendig :":
   1 a$="Druecken Sie jetzt bitte eine Taste ..."
   1 a$="Dieses Programm ist 8 Bytes lang. Nach dem Aufruf mit  PRINT USR 40000  wird es das Ergebnis 180 auf den Bildschirm schreiben."
   1 a$="Dieser Code sagt der Z80, dass nun ein Befehl der 203er-Gruppe folgt.":
   1 a$="Dieser Befehl hat den Code  16 . Sehen wir uns mal die Benutzung dieses Befehles in einem Programm an :":
   1 a$="Diese 4 Zahlen muessen wir jetzt ab unserer Adresse 40000 bis 40003 ablegen. Das Programm wird mit USR 40000 aufgerufen.":
   1 a$="Die Zahlen duerfen nur im Bereich von 0 bis 255 (ein Byte) oder von 0 bis 65535 (zwei Bytes) liegen. Ausserdem hat man nur die Variablen a, b, c, d, e, h und l zur Programmierung zu Verfuegung. Nur das Register a (auch Akkumulator genannt) kann zum Rechnen benutzt werden."
   1 a$="Die Routinen koennen mit LET l=USR 40000 gestartet werden. Wichtig ist, dass jeder Routine am Ende ein ret-Befehl folgt, um zum BASIC zurueckzuspringen. Vergessen wir das, so kann u.U. der Computer abstuerzen.":
   1 a$="Die Befehle der 203er-Gruppe stehen in der Auflistung im Anhang C des Handbuches in der zweiten Spalte. Diese Befehle koennen einzelne Bits von Registerinhalten veraendern oder abfragen.":
   1 a$="Der Vorteil am call-Befehl ist, dass man ein Unterprogramm beliebig oft vom Hauptprogramm aufrufen kann.":
   1 a$="Der Speicherbereich des ZX Spectrum 48K:":
   1 a$="Der ROM-Bereich (in dem das BASIC-System liegt) liegt im Bereich von 0 bis 16383. Dann folgt der Bildschirmspeicher von 16384 bis 22527, dann die Farben des Bildschirms von 22528 bis 23297."
   1 a$="Der Ladebefehl :  Der Befehl   ld  (sprich load) entspricht dem LET-Befehl im BASIC. Um z.B. der Variablen b den Wert von c zuzuweisen, schreiben Sie :":
   1 a$="Der Jump-Befehl veranlasst stattdessen die Z80 dazu, einfach an der festgelegten Stelle weiterzumachen . Das Programm":
   1 a$="Der Code des Befehles  call  NN  lautet  205 , der Code von  JP  NN  lautet  195 . Sehen wir uns folgendes Beispiel an :":
   1 a$="Der Befehl ~nop~ ":
   1 a$="Der Befehl  ld  ( hl ) , a  entspricht dem BASIC-Befehl  POKE  hl , a .":
   1 a$="Der Befehl   ex  de , hl  , der den Code 235 hat, tauscht die Inhalte der Register  de  und  hl  untereinander aus.":
   1 a$="Der Akku sieht dann so aus :":
   1 a$="Den Uebertrag koennen Sie sich genauso wie im Dezimalsystem in der Rechnung vermerken. Sehen Sie dazu folgendes Beispiel. Die Binaerzahlen  101011  und  100110  sollen addiert werden :":
   1 a$="Dazu benutzen wir den Anhang C des BASIC-Handbuches. Wir suchen zuerst nach dem Befehl  LD  a , b  und finden ihn unter dem Code 120 ; dann finden wir  LD  h , d  unter 98 ; LD  d , c  unter 81 und  ret  unter 201.":
   1 a$="Das hl-Registerpaar, das hier in Klammern steht, bedeutet ""der Inhalt der Adresse  hl "". Also entspricht der Ausdruck  ld a , ( hl )  dem BASIC-Befehl  LET a=PEEK hl . Auch hier ist das Ergebnis eine Zahl zwischen 0 und 255.":
   1 a$="Das bedeutet, dass nach dem Befehl  LD  bc , NN  noch zwei weitere Zahlen folgen muessen, damit der Befehl vollstaendig wird. Um das zu verstehen, muessen wir uns mit 2-Byte-Zahlen vertraut machen.":
   1 a$="Das bedeutet, das nach dem Aufruf eines Programmes mit  LET re=USR 40000  der BASIC-Variablen  re  der Wert des  bc-Registerpaares zugewiesen wird. Um das zu beweisen, sehen wir uns folgendes Programm an :":
   1 a$="Das allerwichtigste bei dem Umgang mit  push  und  pop  ist, dass das zuletzt auf dem Stack abgelegte Element auch zuerst wieder vom Stack geholt werden muss. Das saehe in einem programm dann so aus :":
   1 a$="Das Zero-Flag ist besonders nuetzlich, um Schleifen zu programmieren. Nehmen wir an, wir wollen von der Zahl 100 bis 0  rueckwaerts zaehlen, so koennen wir wie folgt vorgehen :":
   1 a$="Das Programm kehrt bereits nach BASIC zurueck, wenn a den Wert  100  erreicht hat. Der zweite  ret-Befehl wird hier also nicht erreicht.":
   1 a$="Das Ergebnis lautet hier logischerweise  100.":
   1 a$="Das BASIC-Programm beginnt ab Adresse 23755. Der Beginn aller nachfolgenden Bereiche (Variablen, usw.) ist von der Laenge des BASIC-Programmes abhaengig. Das bedeutet, dass, wenn Sie auch nur eine Programmzeile eingeben, sich der ganze nachfolgende Bereich um die Laenge dieser Zeile verschiebt."
   1 a$="Daraus ergibt sich fuer das Bytepaar :  245  +  8704  =  8949":
   1 a$="Da sich die c - Schleife innerhalb der b - Schleife befindet, wird die c-Schleife 100 mal durchlaufen, also solange, bis beide Register gleich Null sind.":
   1 a$="Da das hoeherwertige Byte aber immer in 256er Schritten zaehlt, muessen wir das Byte noch mit 256 malnehmen.":
   1 a$="D i e   2 0 3 e r  -  G r u p p e :":
   1 a$="D e r   S t a c k  ( S t a p e l ) :":
   1 a$="D a s   b i n a e r e   Z a h l e n s y s t e m :":
   1 a$="Codes :":
   1 a$="Bitte beachten Sie hier, dass Sie genauso vorgehen, wie im Dezimalsystem. D.h., dass beim Addieren von 3 Einsen, unten eine 1 hingeschrieben und eine weitere 1 in die naechste Stelle uebertragen werden muss, da ":
   1 a$="Bisher kennen Sie die einfachsten Befehle der Z-80 :  ld , add , sub , inc  und  sub . Hier ist eine Liste mit den wichtigsten Befehlen, die Sie unbedingt auswendig wissen muessen, mit ihren Codes zusammengestellt :":
   1 a$="Beim Subtrahieren gehen Sie genauso vor. Merken Sie sich dafuer bitte folgende Binaerzahlen :":
   1 a$="Bei den Befehlen  ld a , ( NN )  und  ld  ( NN ) , a  wird die 2-Byte-Adresse nach dem Befehlscode angefuegt.":
   1 a$="Befehle :":
   1 a$="Beachten Sie, dass den Befehlen  LD  b , N  und  LD  c , N  hier nur eine 1-Byte-Zahl folgt.":
   1 a$="Auf diese Art koennen maximal 7 Schleifen aufgebaut werden ; es stehen ja auch nur 7 Register dafuer zur Verfuegung.":
   1 a$="Auch diese vier Bytes koennen Sie von Adresse 40000 bis 40003 einpoken."
   1 a$="Anschliessend muessen wir das Ergebnis wieder ins  bc  Registerpaar laden, damit wir es uns in BASIC ansehen koennen. Das Programm sieht wie folgt aus :":
   1 a$="Also koennen wir schreiben :":
   1 a$="Also erhalten wir fuer den Befehl  LD  bc , 240  die Byte-Folge   1 , 240 , 0  (wobei das niederwertige Byte zuerst geschrieben wird). Die Bytes fuer unser vorhin geschriebenes Programm lauten demnach:":
   1 a$="Aber wie rechnet man sich die 1-Byte-Zahl  DIS  aus, um zur Zieladresse zu springen ?":
   1 a$="Aber wie koennen wir dieses Programm in den Computer hineinbekommen ?":
   1 a$="Aber man wuerde in BASIC nichts mit dieser Routine anfangen koennen, da BASIC andere Variablen als die Maschinensprache benutzt. Das einzige Register, das vom BASIC benutzt werden kann ist  bc ."
   1 a$="Aber es gibt fuer jeden Bedingungsbefehl auch eine Gegenfunktion, in der einfach vor das Flag ein  n  fuer ""not"" davorgestellt wird . Also springt der Befehl":
   1 a$="= 1386":
   1 a$="6 , 0":
   1 a$="33 , 240 , 0":
   1 a$="2 4 5":
   1 a$="2 4 5  +":
   1 a$="14 , 240":
   1 a$="1 3 8 6  =":
   1 a$="1 , 240 , 0":
   1 a$="1 + 1 = 0":
   1 a$="1 + 1 + 1 = 11   ist.":
   1 a$="1 + 0 = 1":
   1 a$="0 + 1 = 1":
   1 a$="0 + 0 = 0":
   1 a$="*  2 5 6":
   1 a$=" Druecken Sie jetzt bitte eine beliebige Taste...":
   1 a$=" 3 4":
   1 _ = Uebertraege";
   1 ;"101011   (43)";
   1 ;"1010001   (81)"
   1 ;"+ 100110   (38)";
   1 ,"sub N",214
   1 ,"ld l , N",46
   1 ,"ld hl,NN",33
   1 ,"ld h , N",38
   1 ,"ld e , N",30
   1 ,"ld de,NN",17
   1 ,"ld d , N",22
   1 ,"ld c , N",14
   1 ,"ld b , N",6
   1 ,"ld a , N",62
   1 ,"inc l",44
   1 ,"inc hl",33
   1 ,"inc h",36
   1 ,"inc e",28
   1 ,"inc de",19
   1 ,"inc d",20
   1 ,"inc c",12
   1 ,"inc bc",3
   1 ,"inc b",4
   1 ,"inc a",60
   1 ,"dec l",45
   1 ,"dec hl",43
   1 ,"dec h",37
   1 ,"dec e",29
   1 ,"dec de",27
   1 ,"dec d",21
   1 ,"dec c",13
   1 ,"dec bc",11
   1 ,"dec b",5
   1 ,"dec a",61
   1 ,"add a , N",198
   1 ,"LD  h , d",81
   1 ,"LD  d , c",201
   1 ,"LD  a , b",98
   1 "push  bc","
   1 "ld bc,NN",1
   1 "ld  bc , 2048","ld  a , 255","ld  de , 65535","push  af","push  de","push  bc","call  5633","pop  bc","pop  de","pop  af","ret"
   1 "ld  ( de ) , a","
   1 "LD  a , 180","62 , 180","LD  d , 80","22 , 80","sub  d","146","LD  b , 0","6 , 0","LD  c , a","79","ret","201"
   1 "LD  a , 100","62 , 100","add  a , 80","198 , 80","LD  b , 0","6 , 0","LD  c , a","79","ret","201"
   1 "Adresse","Befehle","Codes","x","40000","ld  hl , 10000","33 , 16 , 39","40003","call  45000","205 , 200 , 175","40006","ld  b , h","68","40007","ld  c , l","77","40008","ret","201","x","45000","inc hl","35","45001","inc hl","35","45002","ret","201"
   1 "Adresse","Befehle","Codes","x","40000","ld  hl , 0","33 , 0 , 0","40003","inc  hl","35","40004","inc hl","35","40005","jp  40003","195 , 67 , 156","40008","ret","201"
   1 "Adresse","Befehle","Codes","x","40000","ld  a , 0","62 , 0","40002","ld  b , 200","6 , 200","40004","inc  a","60","40005","cp  100","254 , 100","40007","ret  z","200","40008","djnz  250","16 , 250","40010","ret","201"
   1 "Adresse","Befehle","Codes","x","40000","ld  a , 0","62 , 0","40002","ld  b , 150","6 , 150","40004","inc  a","60","40005","djnz  253","16 , 253","40007","ret","201"
   1 "Adresse","Befehle","Codes","x","40000","ld  a , 0","62 , 0","40002","ld  b , 12","6 , 12","40004","add  a , 14","198 , 14","40006","djnz  252","16 , 252","40008","ret","201" 
   1 "40008","dec  b","b=b-1","40009","jp  nz , 40002","wenn b < > 0, Jp","40012","ret","
   1 "40006","ret","ist, Sprung"
   1 "40000","ld  b , 100","b-Schleife","40002","ld  c , 50","c-Schleife","40004","dec  c","c=c-1","40005","jp  nz , 40004","wenn c < > 0, Jp"
   1 "40000","ld  a , 100","100=Startwert","40002","dec  a","a=a-1","40003","jp  nz , 40002","solange a < > 0"
   1 "40000","jr","40001","DIS","40002","inc  a","40003","dec  a","40004","ret"
   1 "39997","inc  a","39998","dec  a","39999","ret","40000","jr","40001","DIS"
   1 "10","11","100","101","110","111","1000":
   1 ","pop  hl","push  af","
   1 ","pop  de","push  hl","
   1 ","pop  bc","push  de","
   1 ","pop  af"
   1 ","Code","x","ld  a , ( bc )","
   1 ","Code","x","add  hl , bc","
   1 ","9","add  hl , de","
   1 ","58","ld  ( bc ) , a","
   1 ","26","ld  a , ( hl )","
   1 ","25","add  hl , hl","
   1 ","18","ld  ( hl ) , a","
   1 ","126","ld  a , ( NN )","
   1 ","119","ld  ( NN ) , a","
   1 ","10","ld  a , ( de )","
   1  Druecken Sie jetzt bitte eine beliebige Taste...